#希尔排序
def shell_sort(arr):
    n = len(arr)
    # 使用希尔的增量序列，即每次都减半
    gap = n // 2
    while gap > 0:
        # 对每个子序列进行插入排序
        for i in range(gap, n):
            temp = arr[i]
            j = i
            # 将temp插入到已经排序好的子序列中
            while j >= gap and arr[j - gap] > temp:
                arr[j] = arr[j - gap]
                j -= gap
            arr[j] = temp
        gap //= 2

# 测试代码
if __name__ == "__main__":
    arr = [12, 34, 54, 2, 3]
    print("原始数组：", arr)
    shell_sort(arr)
    print("排序后的数组：", arr)
